/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package linkeddata.arida.ufc.br.test;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

/**
 *
 * @author jeovane
 */
public class RemoverXML {
    private static final String CHAVE_RESULT_QUERY = "ResultQuery";
    private static final String VALOR_CLASS_B = "B";
    private static final String ATRIBUTO_CLASS = "class";

    public static void main(String[] args) throws Exception {
        new RemoverXML().testar();
    }

    private void testar() throws Exception {
        String xml = new StringBuilder()
        .append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
        .append("<SPARQLQuery>")
        .append(" <ResultQuery class=\"A\" key=\"a1\">A1</ResultQuery>")
        .append(" <ResultQuery class=\"B\" key=\"a2\">A2</ResultQuery>")
        .append(" <ResultQuery class=\"B\" key=\"a3\">A3</ResultQuery>")
        .append("</SPARQLQuery>")
        .toString();

        // No seu caso não tem problema vir de um arquivo,
        // só estou construindo um documento a partir de uma String
        // para não ter que criar um arquivo separado

        SAXBuilder saxBuilder = new SAXBuilder();
        Document doc = saxBuilder.build(new StringReader(xml));

        // Imprime no console o documento original
        printDoc(doc);

        List<Element> resultClasses = new ArrayList<Element>(doc.getRootElement().getChildren(CHAVE_RESULT_QUERY));
        List<String> classesEncontradas = existingClass(resultClasses);

        System.out.println("\nClasses encontradas: " + classesEncontradas + "\n");

        Iterator<Element> iter = resultClasses.iterator();
        while(iter.hasNext()) {
            Element e = iter.next();
            if (e.getAttributeValue(ATRIBUTO_CLASS).equals(VALOR_CLASS_B)) {
                e.detach();
            }
        }        
        printDoc(doc);
    }
    
    private List<String> existingClass(List<Element> resultClass) {
        List<String> listClass = new ArrayList<String>();
        for (Element e : resultClass) {
            listClass.add(e.getAttributeValue(ATRIBUTO_CLASS));
        }
        return listClass;
    }

    /**
     * Imprime o documento na saída padrão, num formato mais legível.
     */

    private void printDoc(Document doc) throws Exception {
        new XMLOutputter(Format.getPrettyFormat()).output(doc, System.out);
    }
}
